package com.pds.web.app.service.impl;

import com.pds.common.core.domain.entity.SysUser;
import com.pds.common.utils.SecurityUtils;
import com.pds.web.app.mapper.AppVersionMapper;
import com.pds.web.app.service.IAppVersionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author chenguixu
 * @date 2023-07-24
 * App版本配置
 */
@Service
public class AppVersionServiceImpl implements IAppVersionService {

    @Autowired
    AppVersionMapper sppVersionMapper;

    /**
     * 设置app版本信息
     *
     * @param map -versionCode      版本号
     *            -versionName      版本名称
     *            -versionInfo      版本信息
     *            -updateType       更新类型：forcibly = 强制更新, solicit = 弹窗确认更新, silent = 静默更新
     *            -downloadUrl      版本下载链接（IOS安装包更新请放跳转store应用商店链接,安卓apk和wgt文件放文件下载链接）
     * @return
     */
    @Override
    public int add(Map map) throws Exception{
        SysUser sysUser;
        try {
            sysUser = SecurityUtils.getLoginUser().getUser();
        } catch (Exception e) {
            throw new Exception("获取用户信息异常");
        }
        if(ObjectUtils.isEmpty(map.get("versionCode"))){
            throw new Exception("版本号不能为空");
        }
        if(ObjectUtils.isEmpty(map.get("updateType"))){
            throw new Exception("更新类型不能为空");
        }
        if(ObjectUtils.isEmpty(map.get("downloadUrl"))){
            throw new Exception("版本下载链接不能为空");
        }
        //对比一下版本号，如果小于最新的，则不会被下载，上传了也没用
        Map lastMap = sppVersionMapper.getLastVersion();
        if(!ObjectUtils.isEmpty(lastMap)){
            int lastVersionCode = Integer.parseInt(String.valueOf(lastMap.get("versionCode")));
            int newVersionCode = Integer.parseInt(String.valueOf(map.get("versionCode")));
            if(lastVersionCode >= newVersionCode){
                throw new Exception("当前最新版本号为["+lastVersionCode+"],本次版本号小于当前版本号，请检查");
            }
        }

        map.put("createBy",sysUser.getNickName());
        return sppVersionMapper.add(map);
    }

    /**
     * 检查是否有需要更新的最新版本
     *
     * @param versionCode 当前app版本号
     * @return
     */
    @Override
    public Map check(int versionCode) {
        //查询最新版本
        Map map = sppVersionMapper.getLastVersion();
        if(ObjectUtils.isEmpty(map)){
            map = new HashMap(1);
            map.put("newVersion","0");
            return map;
        }
        int newVersionCode = Integer.parseInt(String.valueOf(map.get("versionCode")));
        if(newVersionCode > versionCode){
            map.put("newVersion","1");
            return map;
        }
        map.put("newVersion","0");
        return map;
    }


    /**
     * 历史版本查询列表
     *
     * @return
     */
    @Override
    public List<Map> getAppVersionList() {
        return sppVersionMapper.getAppVersionList();
    }
}
